
#include "Shm.hpp"
#include <cstring>

int main()
{
    // 1. 创建共享内存（CREATER身份）
    Shm shm(pathname, projid, CREATER);
    shm.Attr();  // 打印共享内存属性（大小、key等）

    // 2. 获取共享内存虚拟地址（用于读写数据）
    char *mem = (char *)shm.VirtualAddr();
    printf("Server: 共享内存地址: %p\n", mem);

    //测试二
     printf("Server: 共享内存地址: %p\n", mem);
    printf("Server: 等待接收 A-Z 数据（接收完Z自动退出）...\n\n");
    

    // 2. 循环接收A-Z，收到Z后退出
    char target = 'A';
    while (target <= 'Z')
    {
        // 等待Client写入当前目标字符
        while (strlen(mem) == 0 || mem[0] != target)
        {
            usleep(50000);  // 休眠50ms，降低CPU占用
        }

        // 打印接收的字符
        printf("Server 收到: %c\n", mem[0]);

        // 清空共享内存，准备接收下一个字符
        memset(mem, 0, shm.Size());
        target++;  // 切换到下一个目标字符
    }

    printf("\nServer: A-Z 接收完成，退出程序\n");

    // //测试一
    // // 3. 循环读取 Client 写入的数据
    // while (true)
    // {
    //     // 等待 Client 写入数据（简单同步：检测到非空字符串则读取）
    //     while (strlen(mem) == 0)
    //     {
    //         usleep(100000);  // 休眠100ms，避免空轮询
    //     }

    //     // 打印读取到的数据
    //     printf("Server 收到: %s\n", mem);

    //     // 若 Client 发送 "quit"，则退出
    //     if (strcmp(mem, "quit") == 0)
    //         break;

    //     // 清空共享内存，准备接收下一条数据
    //     memset(mem, 0, shm.Size());
    // }
    // printf("Server 退出\n");

    
    return 0;
}